package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import app.PMF;
import beans.CarrierBean;
import beans.TripCatBean;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class Prevoznik implements Serializable{

	private static final long serialVersionUID = 1379528378890193787L;

	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key sifra;

	private String naziv;
	private List<String> aliases;
	
	private String adresa;
	private String eMail;
	private String telefon;

	@Persistent
	private Key vrstaPrevoza;

	@Persistent
	private Key korisnik;

	public Prevoznik() {
		super();
	}
	
	//koristimo kada imamo samo podatak o nazivu(kod Botova)
	public Prevoznik(String naziv, Key vrstaPrevoza) {
		super();
		this.naziv = naziv;
		this.vrstaPrevoza = vrstaPrevoza;
		this.aliases = new ArrayList<String>();
		this.adresa = "";
		this.eMail = "";
		this.telefon = "";
		this.korisnik = null;
	}
	
	public Prevoznik(String naziv, List<String> aliases, String adresa, String eMail,
			String telefon, Key vrstaPrevoza, Key korisnik) {
		super();
		this.naziv = naziv;
		this.aliases = aliases;		
		this.adresa = adresa;
		this.eMail = eMail;
		this.telefon = telefon;
		this.vrstaPrevoza = vrstaPrevoza;
		this.korisnik = korisnik;
	}

	public Prevoznik(Key sifra, String naziv, List<String> aliases, String adresa, String eMail,
			String telefon, Key vrstaPrevoza, Key korisnik) {
		super();
		this.sifra = sifra;
		this.naziv = naziv;
		this.aliases = aliases;		
		this.adresa = adresa;
		this.eMail = eMail;
		this.telefon = telefon;
		this.vrstaPrevoza = vrstaPrevoza;
		this.korisnik = korisnik;
	}

	public Key getSifra() {
		return sifra;
	}

	public void setSifra(Key sifra) {
		this.sifra = sifra;
	}

	public String getNaziv() {
		return naziv;
	}
	
	public List<String> getAliases() {
		return aliases;
	}

	public void setAliases(List<String> aliases) {
		this.aliases = aliases;
	}

	public void setNaziv(String naziv) {
		this.naziv = naziv;
	}

	public String getAdresa() {
		return adresa;
	}

	public void setAdresa(String adresa) {
		this.adresa = adresa;
	}

	public String geteMail() {
		return eMail;
	}

	public void seteMail(String eMail) {
		this.eMail = eMail;
	}

	public String getTelefon() {
		return telefon;
	}

	public void setTelefon(String telefon) {
		this.telefon = telefon;
	}

	public VrstaPrevoza getVrstaPrevoza() {

		PersistenceManager pm = PMF.get().getPersistenceManager();

		VrstaPrevoza vp = (VrstaPrevoza) pm.getObjectById(VrstaPrevoza.class , vrstaPrevoza);
		pm.close();

		return vp;
	}

	public void setVrstaPrevoza(Key vrstaPrevoza) {
		this.vrstaPrevoza = vrstaPrevoza;
	}

	public User getKorisnik() {
		PersistenceManager pm = PMF.get().getPersistenceManager();

		if(korisnik == null){
			return null;
		}
		
		User kor = (User) pm.getObjectById(User.class , korisnik);
		pm.close();

		return kor;		
	}

	public void setKorisnik(Key korisnik) {
		this.korisnik = korisnik;
	}

	public CarrierBean toCarrierBean(){
		TripCatBean tc = Util.getEntityFromTableByID(VrstaPrevoza.class, 
				vrstaPrevoza.getId()+"").toTripCatBean();

		return new CarrierBean(Integer.valueOf((int)sifra.getId()), naziv, adresa, eMail, telefon,tc);		
	}

	@Override
	public String toString() {
		String retVal = "Prevoznik - ID: " + sifra.getId() + " , naziv: " + naziv
		+ " , Aliases: " + aliases + " , adresa: " + adresa + " , eMail: " + eMail
		+ " , telefon: " + telefon + " , vrstaPrevozaID: " + vrstaPrevoza.getId();
		if(korisnik != null){
			retVal += Util.getEntityFromTableByID(User.class,korisnik.getId()+"");
		}
		else{
			retVal += " NEMA korisnika";
		}
		return retVal;
	}

}